Skip to content

setState是同步还是异步(5m) ​

本节目标:理解“setState是同步还是异步(5m)”的核心思路,并能把它用于实际开发或面试表达。

**setState** **只在****:**
**合成事件和钩子函数中是“异步”的;**
**在原生事件和** **setTimeout** **中都是同步的。**

合成事件:就是****react 在组件中的onClick等都是属于它自定义的合成事件原生事件:比如通过addeventListener添加的,dom中的原生事件

**以下方法可以同步拿到数据**
在setState中的回调函数中拿到
this.setState({
  count: this.state.count + 1
}, () => {
  console.log(this.state.count)
})
// 在setTimeOut中拿到
setTimeout(() => {
  this.setState({ count: this.state.count })
  console.log(this.state.count)
}, 0)
在原生事件中修改状态
state = {
  count: 0
};
componentDidMount() {
  document.body.addEventListener('click', this.changeVal, false);
}
changeVal = () => {
  this.setState({
    number: 1
  })
  console.log(this.state.count)
}

> 来自

 <https://www.jianshu.com/p/afb2331299a3>

本站总访问 — 次